     type
       { This side is the }     { That side is the }
       { type declaration }     { type definition  }
       Pope = Integer;
       John = Real;
       the = Char;
       Second = String;
       Arrayfoo            = array [0 .. 9] of Integer;  { array definition }
       Recordfoo           = record                      { record definition }
                               Bar: Integer;
                             end;
     
            { schema def with discriminants ``x, y: Integer'' }
      { SchemaFoo (x, y: Integer) = array [x .. y] of Integer;}
       CharSetFoo          = set of Char;              { Def of a set }
     {  ObjectFoo           = object                    { Def of an object }
      {                         procedure DoAction;
                               constructor Init;
                               destructor Done;
                             end;
       SubrangeFoo         = -123..456;                { subrange def }
     
       EnumeratedFoo       = (Pope,John,the,Second);   { enum type def }
            { Def of a pointer to another type identifier }
       PInteger            = ^Arrayfoo;
            { Def of an alias name for another type identifier }
       IdentityFoo         = Integer;
            { Def of an integer which was initialized by 123 }
       InitializedFoo      = Integer value 123;
BEGIN

END.
